#!/bin/sh

#定义输出日志的函数
function log() {
   echo -e "$(date '+%Y-%m-%d %H:%M:%S') $@"
}

#接受外部参数devops-script的文件的工作路径
SHELL_SCRIPT_WORK_DIR=$1
#接收外部参数docker编排文件的名称,并赋值给DOCKER_COMPOSE_FILE_NAME这个变量，不同项目的docker编排文件的名称是不同
DOCKER_COMPOSE_FILE_NAME=$2
#拼接docker编排文件的路径=shell脚本所在的目录/docker-compose-home
DOCKER_COMPOSE_FILE_FULL_PATH="${SHELL_SCRIPT_WORK_DIR}/docker-compose-home"
#拼接docker编排文件的路径+文件名=docker编排文件的路径/具体的docker编排文件名称
DOCKER_COMPOSE_FILE_FULL_PATH_NAME="${DOCKER_COMPOSE_FILE_FULL_PATH}/${DOCKER_COMPOSE_FILE_NAME}"
#创建日志文件夹
mkdir ${SHELL_SCRIPT_WORK_DIR}/logs
#拼接日志文件全路径名=shell脚本所在的目录/logs/具体的docker编排文件名称`date +'%Y-%m-%d'`.log
DOCKER_COMPOSE_LOG_FILE_FULL_PATH_NAME=${SHELL_SCRIPT_WORK_DIR}/logs/${DOCKER_COMPOSE_FILE_NAME}-`date +'%Y-%m-%d'`.log
#删除旧的日志文件
rm -rf ${DOCKER_COMPOSE_LOG_FILE_FULL_PATH_NAME}
#创建新的日志文件
touch ${DOCKER_COMPOSE_LOG_FILE_FULL_PATH_NAME}


log '开始执行自动化编排....................\n' >> ${DOCKER_COMPOSE_LOG_FILE_FULL_PATH_NAME}


log '自动化编排步骤一....................' >> ${DOCKER_COMPOSE_LOG_FILE_FULL_PATH_NAME}
log '开始执行-> 校验docker编排文件['${DOCKER_COMPOSE_FILE_NAME}']的配置是否正确...'  >> ${DOCKER_COMPOSE_LOG_FILE_FULL_PATH_NAME}
<<*
 #1.校验docker编排文件的配置是否正确
*
docker-compose -f ${DOCKER_COMPOSE_FILE_FULL_PATH_NAME} --env-file ${DOCKER_COMPOSE_FILE_FULL_PATH}/.env upconfig
log '完成执行-> 校验docker编排文件['${DOCKER_COMPOSE_FILE_NAME}']的配置是否正确...\n' >> ${DOCKER_COMPOSE_LOG_FILE_FULL_PATH_NAME}


log '自动化编排步骤二....................' >> ${DOCKER_COMPOSE_LOG_FILE_FULL_PATH_NAME}
log '开始执行-> 停止正在运行的容器->删除容器->删除镜像...' >> ${DOCKER_COMPOSE_LOG_FILE_FULL_PATH_NAME}
<<*
 #1.停止docker编排文件中包含的所有容器
 #2.删除docker编排文件中包含的所有容器
 #3.删除docker编排文件中包含的所有镜像
*
log docker-compose -f ${DOCKER_COMPOSE_FILE_FULL_PATH_NAME} --env-file ${DOCKER_COMPOSE_FILE_FULL_PATH}/.env down --rmi all
log '完成执行->停止正在运行的容器->删除容器->删除镜像...\n' >> ${DOCKER_COMPOSE_LOG_FILE_FULL_PATH_NAME}

log '自动化编排步骤三....................' >> ${DOCKER_COMPOSE_LOG_FILE_FULL_PATH_NAME}
log '开始执行-> 从远程仓库或者私服拉取镜像->按照顺序启动镜像...' >> ${DOCKER_COMPOSE_LOG_FILE_FULL_PATH_NAME}
<<*
 #1.从远程仓库或者私服中拉取docker-compose.yml中定义的所有镜像到本地
 #2.按照docker-compose.yml中定义的顺序为所有的镜像创建容器并启动
*
docker-compose -f ${DOCKER_COMPOSE_FILE_FULL_PATH_NAME} --env-file ${DOCKER_COMPOSE_FILE_FULL_PATH}/.env up -d
log '完成执行-> 从远程仓库或者私服拉取镜像->按照顺序启动镜像...\n' >> ${DOCKER_COMPOSE_LOG_FILE_FULL_PATH_NAME}
 docker rmi $(docker images | grep "<none>" | awk '{print $3}')
log '完成执行自动化编排....................' >> ${DOCKER_COMPOSE_LOG_FILE_FULL_PATH_NAME}

